#include "precomp.h"
#include "jsemaphore.h"
#include <QSemaphore>

// - class JSemaphorePrivate -

/**
 * @brief The JSemaphorePrivate class
 */
class JSemaphorePrivate
{
public:
    JSemaphorePrivate(int n)
        : base(n)
    {

    }

    QSemaphore base;
};

// - class JSemaphore -

/**
 * @brief JSemaphore::JSemaphore
 * @param n
 */
JSemaphore::JSemaphore(int n)
{
    d = new JSemaphorePrivate(n);
}

/**
 * @brief JSemaphore::~JSemaphore
 */
JSemaphore::~JSemaphore()
{
    delete d;
}

/**
 * @brief JSemaphore::acquire
 * @param n
 */
void JSemaphore::acquire(int n)
{
    d->base.acquire(n);
}

/**
 * @brief JSemaphore::tryAcquire
 * @param n
 * @return
 */
bool JSemaphore::tryAcquire(int n)
{
    return d->base.tryAcquire(n);
}

/**
 * @brief JSemaphore::tryAcquire
 * @param n
 * @param timeout
 * @return
 */
bool JSemaphore::tryAcquire(int n, int timeout)
{
    return d->base.tryAcquire(n, timeout);
}

/**
 * @brief JSemaphore::release
 * @param n
 */
void JSemaphore::release(int n)
{
    d->base.release(n);
}

/**
 * @brief JSemaphore::available
 * @return
 */
int JSemaphore::available() const
{
    return d->base.available();
}
